package com.qingcloud.adminbackend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qingcloud.adminbackend.base.AjaxResult;
import com.qingcloud.adminbackend.entity.app.AppDataSource;
import com.qingcloud.adminbackend.entity.app.AppShare;
import com.qingcloud.adminbackend.entity.app.WebPubApp;
import com.qingcloud.adminbackend.entity.user.SimpleUserDTO;
import com.qingcloud.adminbackend.entity.user.SysUser;
import com.qingcloud.adminbackend.entity.usergroup.SysUsergroup;
import com.qingcloud.adminbackend.entity.usergroup.SysUsergroupUser;
import com.qingcloud.adminbackend.pojo.app.AppPageParam;
import com.qingcloud.adminbackend.pojo.app.AppUserDTO;
import com.qingcloud.adminbackend.pojo.app.AppUserSearchParam;
import com.qingcloud.base.remote.pojo.AppFunctionParam;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipFile;

/**
 * 应用服务接口
 */
public interface IAppService extends IService<WebPubApp> {

    /**
     * 导入应用
     */
    void importApp(ZipFile zipFile);

    /**
     * 分页搜索应用
     */
    Page<WebPubApp> pageApp(AppPageParam param);

    /**
     * 用户应用授权
     */
    Integer userAppAuth(SysUsergroupUser usergroupUser);

    /**
     * 保存应用用户
     */
    Integer saveAppUser(String groupId, List<SysUsergroupUser> userList, String currentUserId);

    /**
     * 查询授权角色
     */
    List findAuthRoles(Integer appId, String userId);

    /**
     * 应用拥有者信息
     */
    SimpleUserDTO findAppOwner(Integer appId);

    /**
     * 应用下用户搜索
     */
    IPage<AppUserDTO> searchAppUser(AppUserSearchParam param, String currentUserId);

    /**
     * 应用下用户组查询
     */
    List<SysUsergroup> userGroupList(Integer appId);

    /**
     * 应用下所有用户查询
     */
    List<SysUser> notInGroupUser(String orgId, String groupId, String userId);

    /**
     * 查询应用权限编码
     */
    Map<String, Set<String>> findAppFunctionCode(AppFunctionParam param);

    /**
     * 分享信息生成
     */
    String saveAppShare(AppShare appShare);

    /**
     * 查询分享信息
     */
    AppShare findAppShare(String shareKey);

    /**
     * 我参与的应用ID
     */
    Set<Integer> getMyPartAppId(String userId);

    /**
     * 保存数据源信息
     */
    AppDataSource saveDataSource(AppDataSource appDataSource);

    /**
     * 查询应用数据源信息
     */
    AppDataSource findDataSource(Integer id);

}
